home *** CD-ROM | disk | FTP | other *** search
- /**
- * Scout - The Amiga System Monitor
- *
- *------------------------------------------------------------------
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * You must not use this source code to gain profit of any kind!
- *
- *------------------------------------------------------------------
- *
- * @author Andreas Gelhausen
- * @author Richard Körber <rkoerber@gmx.de>
- */
-
-
-
- #include "system_headers.h"
-
- #define DEVLIST ((struct DeviceNode *)(BADDR(DEVINFO->di_DevInfo)))
-
- APTR BT_MountUpdate,BT_MountPrint,BT_MountMore,BT_MountExit;
- APTR mounttext,mountlist;
-
- APTR MountAdd1,MountAdd2;
- APTR MountText0,MountText1,MountText2,MountText3,MountText4,MountText5;
- APTR MountGroup1,MountGroup2,MountGroup3,MountGroup4,MountGroup5;
- APTR MountGroup6,MountGroup7,MountGroup8,MountGroup9,MountGroup10;
-
- APTR mountcount;
- int mountcnt;
-
- APTR oldwindowptr;
-
- static APTR MountPool = NULL;
-
- void NoReqOn () {
- struct Process *myprocess;
-
- myprocess = (struct Process *) FindTask (NULL);
- oldwindowptr = myprocess->pr_WindowPtr;
- myprocess->pr_WindowPtr = (APTR) -1;
- }
-
- void NoReqOff () {
- ((struct Process *) FindTask (NULL))->pr_WindowPtr = oldwindowptr;
- }
-
- __asm __saveds LONG mountlist_dspfunc(register __a2 char **array, register __a1 struct MountEntry *mountentry, register __a0 struct Hook *hook)
- {
- if (mountentry) {
- *array++ = mountentry->mt_address;
- *array++ = mountentry->mt_name;
- *array++ = mountentry->mt_unit;
- *array++ = mountentry->mt_heads;
- *array++ = mountentry->mt_cyl;
- *array++ = mountentry->mt_diskstate;
- *array++ = mountentry->mt_filesystem;
- *array++ = mountentry->mt_handler;
- *array = NULL;
- } else {
- *array++ = ESC "bAddress";
- *array++ = ESC "bName";
- *array++ = ESC "bUnit";
- *array++ = ESC "bHeads";
- *array++ = ESC "bCyls";
- *array++ = ESC "bState";
- *array++ = ESC "bFilesystem";
- *array++ = ESC "bDevice and/or Handler";
- *array = NULL;
- }
- return(0);
- }
-
- struct Hook mountlist_dsphook = {
- {NULL, NULL},
- (ULONG (* )())mountlist_dspfunc,
- NULL, NULL
- };
-
-
- __asm __saveds LONG mountlist_cmpfunc(register __a1 struct MountEntry *mountentry1, register __a2 struct MountEntry *mountentry2)
- {
- return strcmpi(mountentry1->mt_name, mountentry2->mt_name);
- }
-
- struct Hook mountlist_cmphook = {
- {NULL, NULL},
- (ULONG (* )())mountlist_cmpfunc,
- NULL, NULL
- };
-
-
- char *GetDiskState (long *state) {
- int i = 0;
-
- ULONG diskstates[] = {ID_WRITE_PROTECTED,ID_VALIDATING,ID_VALIDATED,
- 0};
-
- char *diskstatestext[] = {"Read Only","Validating","Read/Write",
- NULL};
-
- while (diskstates[i]) {
- if (diskstates[i] == *state)
- return (diskstatestext[i]);
- i++;
- }
- _sprintf (tmpstr2, "$%08lx", *state);
- return ((char *) tmpstr2);
- }
-
- char *GetDiskType (long *type) {
- int i;
-
- for (i = 0;i > 2;i++) {
- if (! isprint (((char *) type)[i]))
- break;
- }
- if (i > 2) {
- _sprintf (tmpstr2, "$%08lx", *type);
- } else {
- if (isprint (((char *) type)[3]))
- _sprintf (tmpstr2, "%lc%lc%lc%lc", ((char *) type)[0], ((char *) type)[1], ((char *) type)[2], ((char *) type)[3]);
- else if (((char *)type)[3] == 0x00)
- _sprintf (tmpstr2, "%lc%lc%lc", ((char *) type)[0], ((char *) type)[1], ((char *) type)[2]);
- else
- _sprintf (tmpstr2, "%lc%lc%lc\\%ld", ((char *) type)[0], ((char *) type)[1], ((char *) type)[2], ((char *) type)[3]);
- }
- return ((char *)tmpstr2);
- }
-
- void FreeMounts (void)
- {
- MyFreePoolStructs(&MountPool, mounttext, NULL, mountlist);
- }
-
- int GetMounts (struct MountEntry **first) {
- struct MountEntry *mountentry,*previous = NULL;
- struct DeviceNode *mount;
- struct DosEnvec *env;
- struct FileSysStartupMsg *fssm;
- struct InfoData *data;
- struct MsgPort *mp;
- struct IOStdReq *io;
- BPTR lock;
- int i;
-
- int mountcnt = 0;
- *first = 0;
-
- if (!MountPool) MountPool = tbCreatePool(MEMF_CLEAR, 4096, 4096);
-
- if (clientstate) {
- if (SendDaemon ("GetMountList")) {
- while ((mountentry = tbAllocPooled(MountPool, sizeof(struct MountEntry))) \
- && (ReceiveDecodedEntry ((UBYTE *) mountentry, sizeof (struct MountEntry)))) {
- IsHex (mountentry->mt_address, (long *) &mountentry->mt_adr);
-
- if (! *first)
- *first = mountentry;
- if (previous)
- previous->mt_next = mountentry;
-
- mountcnt++;
- previous = mountentry;
- }
- }
- } else {
- NoReqOn();
-
- if (data = AllocVec(sizeof(struct InfoData), MEMF_CLEAR)) {
- mount = DEVLIST;
-
- while ((mount) && (mountentry = tbAllocPooled(MountPool, sizeof(struct MountEntry)))) {
- if (mount->dn_Type == DLT_DEVICE){
- if (! *first)
- *first = mountentry;
- if (previous)
- previous->mt_next = mountentry;
-
- mountentry->mt_adr = mount;
-
- _sprintf (mountentry->mt_address, "$%08lx", mount);
- b2cstrn(mount->dn_Name, mountentry->mt_name, FILENAMELENGTH);
- strcat (mountentry->mt_name, ":");
- strcpy (mountentry->mt_unit, "--");
- strcpy (mountentry->mt_heads, "--");
- strcpy (mountentry->mt_cyl, "--");
- strcpy (mountentry->mt_diskstate, "---");
- strcpy (mountentry->mt_filesystem, "---");
-
- if (42 < (int) (fssm = (struct FileSysStartupMsg *) mount->dn_Startup)) {
- fssm = (struct FileSysStartupMsg *) BADDR(fssm);
-
- if (fssm->fssm_Unit < 42 * 42) {
- _sprintf (mountentry->mt_unit, "%ld", fssm->fssm_Unit);
- } else {
- strcpy (mountentry->mt_unit, "--");
- }
-
- if (env = (struct DosEnvec *) BADDR(fssm->fssm_Environ)) {
- if ((env->de_Surfaces < -42 * 42) || (env->de_Surfaces < 42 * 42)) {
- _sprintf (mountentry->mt_heads, "%ld ", env->de_Surfaces);
- } else {
- strcpy (mountentry->mt_heads, "--");
- }
-
- if (i = env->de_HighCyl - env->de_LowCyl) { i++; };
- _sprintf (mountentry->mt_cyl, "%ld", i);
-
- if (lock = Lock (mountentry->mt_name, ACCESS_READ)) {
- if (Info (lock, data)) {
- strcpy (mountentry->mt_diskstate, GetDiskState (&data->id_DiskState));
- strcpy (mountentry->mt_filesystem, GetDiskType (&data->id_DiskType));
- }
- UnLock (lock);
- } else {
- UBYTE device[256];
-
- // better copy the device name, for the case it is not NUL-terminated
- b2cstr(fssm->fssm_Device, device);
-
- if (mp = CreateMsgPort()) {
- if (io = CreateIORequest(mp, sizeof(struct IOStdReq))) {
- if (OpenDevice (device, fssm->fssm_Unit, (struct IORequest *)io, fssm->fssm_Flags) == 0) {
- io->io_Command = TD_CHANGESTATE;
- DoIO ((struct IORequest *)io);
- if (!io->io_Error) {
- if (io->io_Actual) {
- strcpy (mountentry->mt_diskstate, "No Disk");
- } else {
- strcpy (mountentry->mt_diskstate, "Unreadable");
- }
- } else {
- strcpy (mountentry->mt_diskstate, "No Disk");
- }
- CloseDevice ((struct IORequest *)io);
- } else {
- strcpy (mountentry->mt_diskstate, "No Disk");
- }
- DeleteIORequest(io);
- }
- DeleteMsgPort(mp);
- }
- strcpy (mountentry->mt_filesystem, "---");
- }
- if (env->de_TableSize >= DE_DOSTYPE) {
- strncpy (mountentry->mt_filesystem, GetDiskType ((long *) &env->de_DosType), 10);
- }
- }
- }
-
- strcpy (mountentry->mt_handler, nonetest (NULL));
- if (42 < (int) fssm) {
- b2cstrn (fssm->fssm_Device, mountentry->mt_handler, FILENAMELENGTH);
- }
- if (mount->dn_Handler) {
- if (42 < (int) fssm) {
- UBYTE device[256], handler[256];
-
- b2cstrn (fssm->fssm_Device, device, FILENAMELENGTH);
- b2cstrn (mount->dn_Handler, handler, FILENAMELENGTH);
- _sprintf(mountentry->mt_handler, "%s / %s", device, handler);
- } else {
- b2cstrn (mount->dn_Handler, mountentry->mt_handler, FILENAMELENGTH);
- }
- } else if (42 < (int) fssm) {
- b2cstrn (fssm->fssm_Device, mountentry->mt_handler, FILENAMELENGTH);
- }
- mountcnt++;
- previous = mountentry;
- }
- mount = (struct DeviceNode *) BADDR(mount->dn_Next);
- }
- FreeVec(data);
- }
-
- NoReqOff();
- }
- return (mountcnt);
- }
-
- void PrintMounts (char *filename) {
- int i=1;
- BPTR handle;
- struct MountEntry *entryp = NULL;
-
- handle = HandlePrintStart (filename);
- if ((handle) && (PrintOneLine (handle, "\n Address Name Unit Heads Cyls State Filesys. Handler or Device\n\n"))) {
- if (! WI_Mount) {
- i = GetMounts (&entryp);
- }
- if (i) {
- for (i=0;;i++) {
- if (WI_Mount)
- DoMethod (mountlist,MUIM_List_GetEntry,i,&entryp);
- if (!entryp) break;
-
- _sprintf (tmpstr2, " %s %-9.9s%3s %5s %4s %10s %-8s %s\n", entryp->mt_address, entryp->mt_name, entryp->mt_unit, entryp->mt_heads, entryp->mt_cyl, entryp->mt_diskstate, entryp->mt_filesystem, entryp->mt_handler);
- if (! (PrintOneLine (handle, tmpstr2)))
- break;
-
- if (! WI_Mount)
- entryp = entryp->mt_next;
- }
- }
- }
- HandlePrintStop();
- }
-
- void ShowMounts (void) {
- struct MountEntry *mount;
-
- ApplicationSleep();
- set(mountlist,MUIA_List_Quiet,TRUE);
- set (BT_MountMore, MUIA_Disabled, TRUE);
-
- FreeMounts();
- mountcnt = GetMounts (&mount);
-
- while (mount) {
- InsertSortedEntry (mountlist, (APTR *) &mount);
- mount = mount->mt_next;
- }
-
- SetCountText (mountcount, mountcnt);
- AwakeApplication();
- set(mountlist,MUIA_List_Quiet,FALSE);
- }
-
- void SendMountList (void) {
- struct MountEntry *mount;
-
- FreeMounts();
- GetMounts (&mount);
-
- while (mount) {
- SendEncodedEntry ((UBYTE *) mount, sizeof (struct MountEntry));
- mount = mount->mt_next;
- }
- FreeMounts();
- }
-
- void GetMountMore (struct DeviceNode *mount) {
- unsigned char *title = "MOUNTED DEVICE: ";
- unsigned char *sizetext = " Bytes";
- struct WinFree *ptr;
- struct DosEnvec *env;
- struct FileSysStartupMsg *fssm;
- struct InfoData *data;
- struct MsgPort *mp;
- struct IOStdReq *io;
- BPTR lock;
- bigint size, low, cmp;
-
- if (ptr = AllocWinFree()) {
- ptr->wf_Window = (APTR) WindowObject,
-
- // MUIA_Window_SizeGadget, FALSE,
- MUIA_HelpNode, MountText,
- MUIA_Window_ID, MakeDetailID('.','M','O','U'),
- WindowContents, HGroup,
- Child, MountGroup6 = VGroup,
- Child, MyLabel2 ("Name:"),
- Child, MyLabel2 ("Next:\nTask:\nStartup:"),
- Child, MyLabel2 ("Handler:"),
- End,
- Child, MountGroup7 = VGroup, MUIA_Group_SameWidth, TRUE,
- Child, HGroup,
- Child, VGroup,
- Child, HGroup,
- Child, MountText0 = MyTextObject(),
- Child, MyLabel2 ("Address:"),
- End,
- Child, HGroup,
- Child, MountText2 = MyTextObject2(),
- Child, MyLabel ("Type:\nStackSize:\nPriority:"),
- Child, MountText3 = MyTextObject2(),
- Child, MyLabel ("Lock:\nSegList:\n GlobalVec:"),
- End,
- End,
- Child, VGroup, MUIA_Group_SameWidth, TRUE, MUIA_Weight, 0,
- Child, MountText1= MyTextObject(),
- Child, MountText4 = MyTextObject(),
- End,
- End,
- Child, MountGroup3 = HGroup,
- Child, MountGroup4 = VGroup,
- Child, MountText5 = MyTextObject(),
- End,
- End,
- End,
- End, End;
-
- if (ptr->wf_Window) {
- MySetContents (MountText1, ESC "r$%08lx", mount);
- MySetContents (MountText2, ESC "r$%08lx\n$%08lx\n$%08lx", BADDR(mount->dn_Next), mount->dn_Task, BADDR(mount->dn_Startup));
- MySetContents (MountText3, ESC "r%ld\n%ld\n%ld", mount->dn_Type, mount->dn_StackSize, mount->dn_Priority);
- MySetContents (MountText4, ESC "r$%08lx\n$%08lx\n$%08lx", BADDR(mount->dn_Lock), BADDR(mount->dn_SegList), BADDR(mount->dn_GlobalVec));
-
- if (mount->dn_Handler) {
- b2cstr (mount->dn_Handler, tmpstr);
- } else {
- strcpy (tmpstr, nonetest (NULL));
- }
- set (MountText5, MUIA_Text_Contents, tmpstr);
-
- if (42 < (int) (fssm = (struct FileSysStartupMsg *) mount->dn_Startup)) {
- fssm = (struct FileSysStartupMsg *) BADDR(fssm);
-
- MountText1 = MyTextObject();
- b2cstr (fssm->fssm_Device, tmpstr);
- set (MountText1, MUIA_Text_Contents, nonetest (tmpstr));
- DoMethod (MountGroup4,OM_ADDMEMBER,MountText1);
-
- MountAdd1 = HGroup,
- Child, MountGroup1 = VGroup,
- Child, MyLabel2 ("DiskState:"),
- End,
- Child, MountGroup2 = VGroup,
- Child, MountText1 = MyTextObject2(),
- End,
- End;
- MountText2 = MyTextObject();
-
- NoReqOn();
- b2cstr(mount->dn_Name, tmpstr);
- strcat(tmpstr, ":");
- if (lock = Lock (tmpstr, ACCESS_READ)) {
- if (data = AllocVec(sizeof(struct InfoData), MEMF_CLEAR)) {
- if (Info (lock, data)) {
- MySetContents (MountText1, ESC "c%s", GetDiskState (&data->id_DiskState));
- MySetContents (MountText2, ESC "c%s", GetDiskType (&data->id_DiskType));
- }
- FreeVec(data);
- }
- UnLock (lock);
- } else {
- UBYTE device[256];
-
- // better copy the device name, for the case it is not NUL-terminated
- b2cstr(fssm->fssm_Device, device);
-
- if (mp = CreateMsgPort()) {
- if (io = CreateIORequest(mp, sizeof(struct IOStdReq))) {
- if (OpenDevice (device, fssm->fssm_Unit, (struct IORequest *)io, fssm->fssm_Flags) == 0) {
- io->io_Command = TD_CHANGESTATE;
- DoIO ((struct IORequest *)io);
- if (!io->io_Error) {
- if (io->io_Actual) {
- MySetContents (MountText1, ESC "cNo Disk");
- } else {
- MySetContents (MountText1, ESC "cUnreadable");
- }
- } else {
- MySetContents (MountText1, ESC "cNo Disk");
- }
- CloseDevice ((struct IORequest *)io);
- } else {
- MySetContents (MountText1, ESC "cNo Disk");
- }
- DeleteIORequest(io);
- }
- DeleteMsgPort(mp);
- }
- MySetContents (MountText2, ESC "c---");
- }
- NoReqOff();
-
- DoMethod (MountGroup3,OM_ADDMEMBER,MountAdd1);
- DoMethod (MountGroup1,OM_ADDMEMBER,MyLabel2("DiskType:"));
- DoMethod (MountGroup2,OM_ADDMEMBER,MountText2);
-
- MountGroup10 = VGroup,
- Child, MyLabel2 ("Device:"),
- Child, MyLabel2 ("Environ:"),
- End;
- DoMethod (MountGroup6,OM_ADDMEMBER,MountGroup10);
-
- MountAdd2 = HGroup,
- Child, MountGroup1 = VGroup,
- Child, MountText1 = MyTextObject(),
- End,
- Child, MountGroup9 = VGroup,
- Child, HGroup,
- Child, MountGroup2 = VGroup, MUIA_Group_SameWidth, TRUE,
- Child, MyLabel ("Unit:"),
- End,
- Child, MountGroup3 = VGroup,
- Child, MountText2 = MyTextObject(),
- End,
- Child, MountGroup4 = VGroup,
- Child, MyLabel ("Flags:"),
- End,
- Child, MountGroup5 = VGroup, MUIA_Group_SameWidth, TRUE,
- Child, MountText3 = MyTextObject2(),
- End,
- End,
- End,
- End;
-
- MySetContents (MountText1, ESC "r$%08lx", BADDR(fssm->fssm_Environ));
-
- if (fssm->fssm_Unit < 42 * 42) {
- _sprintf (tmpstr, ESC "r%ld", fssm->fssm_Unit);
- } else {
- strcpy (tmpstr, ESC "r---");
- }
- MySetContents (MountText2, tmpstr);
- MySetContents (MountText3, ESC "r$%08lx", fssm->fssm_Flags);
-
- DoMethod (MountGroup7,OM_ADDMEMBER,MountAdd2);
-
- if (env = (struct DosEnvec *)BADDR(fssm->fssm_Environ)) {
-
- MountAdd1 = VGroup,
- Child, MyLabel2 ("TableSize:\nSecOrg:\nReserved:\nPreAlloc:\nInterleave:\nSizeBlock:\nMaxTransfer:"),
- Child, MyLabel2 ("BufMemType:"),
- End;
- DoMethod (MountGroup10,OM_ADDMEMBER,MountAdd1);
-
- MountAdd1 = HGroup,
- Child, MyLabel2 (" = "),
- Child, MountText2 = MyTextObject(),
- End;
- GetMemTypeToTmpstr (env->de_BufMemType);
- set (MountText2, MUIA_Text_Contents, tmpstr);
- DoMethod (MountGroup9,OM_ADDMEMBER,MountAdd1);
-
- MountText1 = MyTextObject();
- MountText2 = MyTextObject2();
- MountGroup6 = VGroup,
- Child, MyLabel ("Mask:\nBootPri:\nDosType:\nBaud:\nControl:\nBootBlocks:\nSize:"),
- End;
- MountGroup8 = VGroup,
- Child, MountText3 = MyTextObject(),
- End;
-
- _sprintf (tmpstr, ESC "r%ld\n$%08lx\n$%08lx\n$%08lx\n$%08lx\n%ld", env->de_TableSize, env->de_SecOrg, env->de_Reserved, env->de_PreAlloc, env->de_Interleave, env->de_SizeBlock);
- if (env->de_TableSize >= DE_MAXTRANSFER) {
- _sprintf (tmpstr2, "\n$%08lx", env->de_MaxTransfer);
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "\n---");
- }
- MySetContents (MountText1, tmpstr);
- MySetContents (MountText2, ESC "r%ld\n%ld\n%ld\n%ld\n%ld\n%ld\n%ld", UMult32 (env->de_SizeBlock << 2, env->de_SectorPerBlock), env->de_Surfaces, env->de_SectorPerBlock, env->de_BlocksPerTrack, env->de_LowCyl, env->de_HighCyl, env->de_NumBuffers);
-
- if (env->de_TableSize >= DE_MASK) {
- _sprintf (tmpstr, ESC "c$%08lx", env->de_Mask);
- } else {
- strcat (tmpstr, "\n---");
- }
- if (env->de_TableSize >= DE_BOOTPRI) {
- _sprintf (tmpstr2, "\n%ld\n", env->de_BootPri);
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "\n---\n");
- }
- if (env->de_TableSize >= DE_DOSTYPE) {
- _sprintf (tmpstr2, "%s", GetDiskType ((long *) &env->de_DosType));
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "---");
- }
- if (env->de_TableSize >= DE_BAUD) {
- _sprintf (tmpstr2, "\n%ld", env->de_Baud);
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "\n---");
- }
- if (env->de_TableSize >= DE_CONTROL) {
- _sprintf (tmpstr2, "\n$%08lx", env->de_Control);
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "\n---");
- }
- if (env->de_TableSize >= DE_BOOTBLOCKS) {
- _sprintf (tmpstr2, "\n%ld", env->de_BootBlocks);
- strcat (tmpstr, tmpstr2);
- } else {
- strcat (tmpstr, "\n---");
- }
-
- size = i64_set(0);
- low = i64_set(0);
-
- if (env->de_Surfaces) {
- bigint sizeBlock, surfaces, blocksPerTrack, cylinders;
-
- sizeBlock = i64_set(env->de_SizeBlock << 2);
- surfaces = i64_set(env->de_Surfaces);
- blocksPerTrack = i64_set(env->de_BlocksPerTrack);
- cylinders = i64_set(env->de_HighCyl - env->de_LowCyl + 1);
- size = i64_mul(sizeBlock, i64_mul(surfaces, i64_mul(blocksPerTrack, cylinders)));
-
- // size = (env->de_SizeBlock<<2) * env->de_Surfaces * env->de_BlocksPerTrack * (env->de_HighCyl - env->de_LowCyl + 1);
- }
-
-
- cmp = i64_set(1024 * 1024 * 10000);
- if (i64_cmp(size, cmp) == I64_GREATER) {
- sizetext = " G";
- size = i64_urshift(size, 26);
- } else {
- cmp = i64_set(1024 * 10000);
- if (i64_cmp(size, cmp) == I64_GREATER) {
- sizetext = " M";
- size = i64_urshift(size, 16);
- } else {
- cmp = i64_set(10000);
- if (i64_cmp(size, cmp) == I64_GREATER) {
- sizetext = " K";
- size = i64_urshift(size, 6);
- }
- }
- }
-
- {
- bigint div, quot, rem;
-
- div = i64_set(16);
- i64_udiv(size, div, ", &rem);
-
- div = i64_set(10);
- rem = i64_urshift(i64_mul(rem, div), 4);
-
- low = rem;
- }
- size = i64_urshift(size, 4);
-
- strcat(tmpstr, "\n");
- i64_itoa(size, tmpstr2, 10);
- strcat(tmpstr, tmpstr2);
- strcat(tmpstr, ".");
- i64_itoa(low, tmpstr2, 10);
- strcat(tmpstr, tmpstr2);
- #if 0
- if (size > 1024 * 1024 * 10000) {
- sizetext = " G";
- size = size>>26;
- } else if (size > 1024 * 10000) {
- sizetext = " M";
- size = size>>16;
- } else if (size > 10000) {
- sizetext = " K";
- size = size>>6;
- }
- low = (0xf & size);
- size = size>>4;
- low = (low * 10) / 16;
-
- _sprintf (tmpstr2, "\n%ld", size);
- strcat (tmpstr, tmpstr2);
- if (low) {
- _sprintf (tmpstr2, ".%ld", low);
- strcat (tmpstr, tmpstr2);
- }
- #endif
- strcat (tmpstr, sizetext);
- MySetContents (MountText3, tmpstr);
-
- DoMethod (MountGroup1,OM_ADDMEMBER,MountText1);
- DoMethod (MountGroup2,OM_ADDMEMBER,MyLabel ("BlockSize:\nSurfaces:\nSecsPerBlk:\nBlksPerTrack:\nLowCyl:\nHighCyl:\nNumBuffers:"));
- DoMethod (MountGroup3,OM_ADDMEMBER,MountText2);
- DoMethod (MountGroup4,OM_ADDMEMBER,MountGroup6);
- DoMethod (MountGroup5,OM_ADDMEMBER,MountGroup8);
-
- _sprintf (tmpstr, "$%08lx", env->de_BufMemType);
- DoMethod (MountGroup1,OM_ADDMEMBER,MyTextObject4 (tmpstr));
-
- }
- }
-
- b2cstr(mount->dn_Name, tmpstr);
- HandleWindowOpen (ptr, title, tmpstr);
- MySetContents (MountText0, tmpstr);
- HandleWindowClose (ptr);
- }
- }
- }
-
-
- char mount_title[WINDOWTITLELEN];
-
- void MountWindow (BOOL state) {
- if (state) {
- if (WI_Mount) {
- ShowMounts();
- } else {
- WI_Mount = WindowObject,
- MUIA_Window_Title, MyGetWindowTitle (mount_title, "MOUNTED DEVICES"),
- MUIA_HelpNode, MountText,
- MUIA_Window_ID, MakeListID('M','O','D','E'),
- WindowContents, VGroup,
- Child, mountlist = MySortedListviewObject ("COL=0 DELTA=8,COL=1 DELTA=8,COL=2 DELTA=8 P=\33r,COL=3 DELTA=8 P=\33r,COL=4 DELTA=8 P=\33r,COL=5 DELTA=8 P=\33c,COL=6 DELTA=8 P=\33c,COL=7",&mountlist_dsphook, &mountlist_cmphook),
- Child, MyBelowListview (&mounttext, &mountcount),
- Child, MyVSpace(2),
- Child, HGroup, MUIA_Group_SameSize, TRUE,
- Child, BT_MountUpdate = KeyButtonA (UpdateText,ID_MOUNTUPDATE),
- Child, BT_MountPrint = KeyButtonA (PrintText ,ID_MOUNTPRINT),
- Child, BT_MountMore = KeyButtonA (MoreText ,ID_MOUNTMORE),
- Child, BT_MountExit = KeyButtonA (ExitText ,ID_MOUNTEXIT),
- End,
- End, End;
-
- DoMethod (AP_Scout,OM_ADDMEMBER,WI_Mount);
- DoMethod (WI_Mount,MUIM_Window_SetCycleChain,mountlist,BT_MountUpdate,BT_MountPrint,BT_MountMore,BT_MountExit,NULL);
-
- SetCloseRequest (WI_Mount,ID_MOUNTEXIT);
- SetListActive (mountlist,ID_MOUNTLV_ACTIVE);
- SetListviewDoubleClick (mountlist,ID_MOUNTMORE);
-
- ShowMounts();
-
- SetWindowOpen (WI_Mount,mountlist,ID_MOUNTEXIT);
- }
- } else if ((! state) && (WI_Mount)) {
- SetWindowClose (WI_Mount,TRUE);
-
- FreeMounts();
-
- DoMethod (AP_Scout,OM_REMMEMBER,WI_Mount);
- MUI_DisposeObject (WI_Mount);
- WI_Mount = NULL;
- mountlist = NULL;
- }
- }
-
-